home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_08_03 / 8n03019a < prev    next >
Text File  |  1990-03-18  |  1KB  |  69 lines

  1.  
  2. *****Listing 1*****
  3.  
  4.  
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7.  
  8. /* structure type flag values */
  9.  
  10. #define TYPENONE   0    /* Not pointing at an object */
  11. #define TYPECHAR   1    /* char */
  12. #define TYPEINT    2    /* int */
  13. #define TYPELONG   3    /* long */
  14. #define TYPEDOUBLE 4    /* double */
  15.  
  16. struct node {
  17.     struct node *pfwd;    /* forward ptr */
  18.     struct node *pbwd;    /* backward ptr */
  19.     void *pobject;        /* ptr to object */
  20.     unsigned int objtype;    /* indicate object type */
  21. };
  22.  
  23. main()
  24. {
  25.     char c = 'A';
  26.     int i = 10;
  27.     long int l = 123456;
  28.     double d = 123.45;
  29.     struct node *pnode;
  30.  
  31.     pnode = malloc(sizeof(struct node));
  32.  
  33. /* let's point to a double */
  34.  
  35.     pnode->pobject = &d;
  36.     pnode->objtype = TYPEDOUBLE;
  37.     pnode->pfwd = NULL;
  38.     pnode->pbwd = NULL;
  39.  
  40. /* at a later point, let's process the object to which we point */
  41.  
  42.     switch (pnode->objtype) {
  43.  
  44.     case TYPECHAR:
  45.         printf("char: %c\n", *(char *)pnode->pobject);
  46.         break;
  47.  
  48.     case TYPEINT:
  49.         printf("int: %d\n", *(int *)pnode->pobject);
  50.         break;
  51.  
  52.     case TYPELONG:
  53.         printf("long: %ld\n", *(long *)pnode->pobject);
  54.         break;
  55.  
  56.     case TYPEDOUBLE:
  57.         printf("double: %f\n", *(double *)pnode->pobject);
  58.         break;
  59.  
  60.     case TYPENONE:
  61.         printf("none:\n");
  62.         break;
  63.     }
  64. }
  65.  
  66. The output generated by this program is:
  67. double: 123.450000
  68.  
  69.